package com.udima.reglocation;

import java.util.Timer;
import java.util.TimerTask;

import com.udima.reglocation.util.SQLiteDatabaseHandler;
import com.udima.reglocation.util.LocationHandler;



import android.app.Activity;
import android.content.Context;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.view.View;
import android.widget.*;

public class SaveTrackActivity extends Activity {

    private Button btnStart;
    private Button btnStop;
    private Button btnPause;
    private Button btnContinue;
    private SQLiteDatabaseHandler db;
    private Timer timer;
    private int delay = 1000;
    private int period = MainActivity.config.getPeriod() * 1000;
    private TextView messageTextView;
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.save_track);
        
        //Base de datos
        db = new SQLiteDatabaseHandler(this);
        final LocationManager mlocManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        final LocationHandler mlocListener = new LocationHandler();
        
        //Texto de estado del GPS
        messageTextView = (TextView) findViewById(R.id.gps_status);

        //Botones del formulario
        btnStart    = (Button) findViewById(R.id.btnStart);
        btnStop     = (Button) findViewById(R.id.btnStop);
        btnPause    = (Button) findViewById(R.id.btnPause);
        btnContinue = (Button) findViewById(R.id.btnContinue);
        
        //Codigo para el boton que inicia el servicio
        //Se borran todos los datos y se crean timer y servicio para escuchar al GPS
        btnStart.setOnClickListener(new View.OnClickListener() {
        	 
            public void onClick(View view) {
            	
            	//Antes de grabar un nuevo recorrido se elimina el anterior de la tabla SQLite
            	db.clearTable();
            	timer = new Timer();
            	
            	//Servicio y manejador del la localizacion via GPS
        		mlocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0,(LocationListener) mlocListener);

        		messageTextView.setText("Servicio iniciado");

        		timer.scheduleAtFixedRate(new TimerTask()
        		{
        			public void run()
        			{
        				setLocation();
        			}
        		}, delay, period);	
            }
        });
        
        //Codigo para el boton de parada del servicio
        //Se elimina el timer y se detiene la recepcion de datos via GPS
        btnStop.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
				timer.cancel();
        		mlocManager.removeUpdates((LocationListener) mlocListener);
                messageTextView.setText("Servicio detenido");
            }
        });
        
        //Codigo para el boton pausa del servicio
        //Solamente se elimina el timer para que deje de guardar en la BBDD
        btnPause.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
            	timer.cancel();
                messageTextView.setText("Servicio pausado");
            }
        });
        
        //Boton para continuar el servicio tras una pausa
        //Se crea un nuevo timer y se sigue escuchando por el LocationListener que esta activo
        btnContinue.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {

            	timer = new Timer();

        		timer.scheduleAtFixedRate(new TimerTask()
        		{
        			public void run()
        			{
        				setLocation();
        			}
        		}, delay, period);	

                messageTextView.setText("Servicio continuado");
            }
        });

    }
    
    public void setLocation()
    {
    	
    	//this.messageTextView.setText("Recibiendo datos");
    	/*
    	this.messageTextView.setText("Recibiendo datos: Lat-"  + LocationHandler.track.getLatitude().toString()  +
    											 " Long-" + LocationHandler.track.getLongitude().toString()  +
    										     " Alt-"  + LocationHandler.track.getAltitude().toString()   +
    										     " Spd-"  + LocationHandler.track.getSpeed().toString() 
    			                );
    	*/

    	db.insertRow(LocationHandler.track.getLatitude(),
    				 LocationHandler.track.getLongitude(),
    				 LocationHandler.track.getAltitude(),
    				 LocationHandler.track.getSpeed());
    	//LocationHandler.track.reset();
    	/*
    	if(LocationHandler.track.getLatitude()!=0 && LocationHandler.track.getLongitude()!=0){
    		messageTextView.setText(LocationHandler.track.getLatitude().toString()
    				                +"-"+
    				                LocationHandler.track.getLongitude().toString());
    		db.insertRow(LocationHandler.track.getLatitude(),LocationHandler.track.getLongitude(),LocationHandler.track.getAltitude());
    		LocationHandler.track.reset();
    	}
    	*/
    }
 
}
